<?php
/**
 * View_Tags
 *
 * Класс для отображения тегов
 *
 * @author Гринько Виталий <vitalygrinko@gmail.com>
 * @version 1.0
 */
class View_Tags {
  
  /**
   * Пустой конструктор
   *
   */
  public function __construct() {$_arrCounts = array(0,0,0,0,0,0,0,0,0,0);}
  private static $_arrCounts = array(0,0,0,0,0,0,0,0,0,0);

  /**
   * Пересчитываем кол-во (уровни в наличии)
   *
   * @return string
   */
  private static function _parseCount($percent) {
    $nLevel = 0;
    if (($percent >= 0) && ($percent <=10))
      self::$_arrCounts[0]++;
    elseif (($percent > 10) && ($percent <=20))
      self::$_arrCounts[1]++;
    elseif (($percent > 20) && ($percent <=30))
      self::$_arrCounts[2]++;
    elseif (($percent > 30) && ($percent <=40))
      self::$_arrCounts[3]++;
    elseif (($percent > 40) && ($percent <=50))
      self::$_arrCounts[4]++;
    elseif (($percent > 50) && ($percent <=60))
      self::$_arrCounts[5]++;
    elseif (($percent > 60) && ($percent <=70))
      self::$_arrCounts[6]++;
    elseif (($percent > 70) && ($percent <=80))
      self::$_arrCounts[7]++;
    elseif (($percent > 80) && ($percent <=90))
      self::$_arrCounts[8]++;
    elseif (($percent > 90) && ($percent <=100))
      self::$_arrCounts[9]++;
    else {
      $nLevel = 0;
    }
    if ($nLevel && ($nLevel > $notEmptyCnts))
      $nLevel -= (10 - $notEmptyCnts);
    return 'level-size' . $nLevel;
  }  
  
  /**
   * Получаем CSS-класс для оформления ссылок на теги (для вывода облака тегов)
   *
   * @return string
   */
  private static function _getClassName($percent, $notEmptyCnts) {
    $nLevel = 0;
    if (($percent >= 0) && ($percent <=10))
      $nLevel = 1;
    elseif (($percent > 10) && ($percent <=20))
      $nLevel = 2;
    elseif (($percent > 20) && ($percent <=30))
      $nLevel = 3;
    elseif (($percent > 30) && ($percent <=40))
      $nLevel = 4;
    elseif (($percent > 40) && ($percent <=50))
      $nLevel = 5;
    elseif (($percent > 50) && ($percent <=60))
      $nLevel = 6;
    elseif (($percent > 60) && ($percent <=70))
      $nLevel = 7;
    elseif (($percent > 70) && ($percent <=80))
      $nLevel = 8;
    elseif (($percent > 80) && ($percent <=90))
      $nLevel = 9;
    elseif (($percent > 90) && ($percent <=100))
      $nLevel = 10;
    else {
      $nLevel = 0;
    }
    if ($nLevel && ($nLevel > $notEmptyCnts))
      $nLevel -= (10 - $notEmptyCnts);
    return 'level-size' . $nLevel;
  }  
  
  /**
   * Отображение облака тегов
   *
   * @param array $arrTags - масив с полной информацией о тегах (`ID_tag`, `tag_name`)
   * @param int $maxAmount - максимальное количество упоминани тегов среди выбранных.
   * @param array $arrTagIds - массив с текущими тегами
   * @param bool $isCommon - является ли облако общим. False => облако типизированное (по типу сущности)
   * @param string|int $essenceType - тип сущности
   * @param string $strSortType - тип сортировки
   */
  public static function viewCloud($arrTags, $maxAmount, $arrTagsAddNames = NULL, $isCommon = true, $essenceType = NULL, $strSortType = 'shuffle') {
    switch ($strSortType) {
      case 'shuffle': 
        shuffle($arrTags);
      break;
    }
    echo '<div class="subCloud">';
    for ($i = 0; $i < sizeof($arrTags); $i++)
      self::_parseCount(round($arrTags[$i]['amount'] / $maxAmount * 100));
    $notEmptyCnts = 0;
    for ($i = 0; $i < sizeof(self::$_arrCounts); $i++)
      if (self::$_arrCounts[$i]) $notEmptyCnts++;    
    for ($i = 0; $i < sizeof($arrTags); $i++) {
      $linkTags = $arrTags[$i]['tag_name'];
      if (!is_NULL($arrTagsAddNames) && (sizeof($arrTagsAddNames) > 0)) {
        $linkTags .= ',' . join(',', $arrTagsAddNames);
      } 
      $essenceTypeCondition = '';
      if (!$isCommon) {
          $essenceTypeCondition = $essenceType ? Service_Essence::getEssenceTypeID($essenceType) : NULL /*$arrTags[$i]['essence_type']*/;
      }
      
      echo '<a href="' . W_ABSPATH . 'tag/' . str_replace("#", "%23", str_replace("+", "%2B", $linkTags)) . '/' . $essenceTypeCondition . '" class="' . self::_getClassName(round($arrTags[$i]['amount'] / $maxAmount * 100), $notEmptyCnts) . '">' . $arrTags[$i]['tag_name'] . '</a>  ';
    }
    echo '</div>';
  }
  
  public static function viewSolutionsCloud($arrTags, $maxAmount) {
    shuffle($arrTags);
    echo '<div class="subCloud">';
    for ($i = 0; $i < sizeof($arrTags); $i++)
      self::_parseCount(round($arrTags[$i]['amount'] / $maxAmount * 100));
    $notEmptyCnts = 0;
    for ($i = 0; $i < sizeof(self::$_arrCounts); $i++)
      if (self::$_arrCounts[$i]) $notEmptyCnts++;    
    for ($i = 0; $i < sizeof($arrTags); $i++) {
      $linkTags = $arrTags[$i]['tag_name'];
      $essenceTypeCondition = '';
      echo '<a href="' . W_ABSPATH . 'solutions?tags=' . str_replace("#", "%23", str_replace("+", "%2B", $linkTags)) . '&filterSmall.x" class="' . self::_getClassName(round($arrTags[$i]['amount'] / $maxAmount * 100), $notEmptyCnts) . '">' . $arrTags[$i]['tag_name'] . '</a>  ';
    }
    echo '</div>';
  }
  
  /**
   * Выводит теги 
   *
   * @param string|array $tags
   * @param string $class - класс для ссылки
   * @param string $strPath - путь до тегов, например, W_ABSPATH . 'questions/'
   * @return bool
   */
  public static function showTags($tags, $idEssence, $type = NULL, $class='', $strPath = W_ABSPATH, $glue = ', ', $arrUserDelTags = NULL) {
  	$objSession = User_Session::instance();
    $arrTags = Tags::convertLinearTagsStringToArray($tags);
    $sizeTags = sizeof($arrTags);
    if (!$sizeTags)
      return false;
    $str = '<ul class="' . (is_array($arrUserDelTags) ? 'new_tags' : 'all_tags') . '" id="new_tags_id_essence_' . $idEssence . '">
              <li>Теги:</li>';
    for ($i = 1; $i <= $sizeTags; $i++) {
    	$tag = trim($arrTags[$i - 1]);
    	$str .= '<li><a href="' . $strPath . 'tag/' . str_replace("#", "%23", str_replace("+", "%2B", $tag)) . '/' . $type . ' " class="' . $class . '">' . $tag . '</a>';
    	if ($objSession->isLoggedIn() && is_array($arrUserDelTags) && !in_array($tag, $arrUserDelTags))
  	     $str .= '<a href="#" class="removeTag" title="Удалить тег" onclick="tags.askToRemoveTag(this, ' . $idEssence . ', ' . $type . ', \'' . $tag . '\');return false;">
      	                  <img src="' . W_IMAGES . 'background/bg_new_tags.gif">
      	          </a>';
     	if ($i != $sizeTags) 
     	  $str .= $glue;
      $str .= '</li>';
    }
    if ($objSession->isLoggedIn())
    	$str .= View_Tags::_getAddTagButton($idEssence);
    $str .= '</ul>';
    return $str;
  }

  public static function showTagsInList($tags, $type, $addCommonClass='', $strPath = W_ABSPATH, $glue = ', ') {
    $arrTags = Tags::convertLinearTagsStringToArray($tags);
    $sizeTags = sizeof($arrTags);
    if (!$sizeTags)
      return false;

    $str = '<ul class="all_tags ' . $addCommonClass . '">';
    for ($i = 1; $i <= $sizeTags; $i++) {
    	$tag = trim($arrTags[$i - 1]);
     	$str .= '<li><a href="' . $strPath . 'tag/' . str_replace("#", "%23",str_replace("+", "%2B", $tag)) . '/' . $type . '">' . $tag . '</a>';
     	if ($i != $sizeTags) 
     	  $str .= $glue;
     	$str .= '</li>';
     	
    }

    $str .= '</ul>';
    return $str;
  }

  //ДОРАБОТАТЬ!
  /**
   * Отображение результатов поиска по тегам
   *
   * @param array $arrSearchResults - массив с результатами поиска по тегам
   * @param string|int $essenceType - тип сущности
   */
  public static function viewTagsSearchResults($arrSearchResults, $essenceType = NULL) {
    echo '<div class="searchResults">';
    for ($i = 0; $i < sizeof($arrSearchResults); $i++) {
      $essenceTypeTag = (!$essenceType) ? $arrSearchResults[$i]['essence_type'] : $essenceType; //Если тип не задан, то получаем его из данных о сущности
      $strEssenceType = Service_Essence::getEssenceTypeName($essenceTypeTag);
      $strEssenceName = Service_Essence::getEssenceTypeHumanName($essenceTypeTag);
      echo '<span>' . ($i + 1) . '.</span>&nbsp;
            <span><a href="' . W_ABSPATH . $strEssenceType . '/' . $arrSearchResults[$i]['ID_' . $strEssenceType] . '" title="">' . $arrSearchResults[$i]['name'] . '</a></span> (' . $strEssenceName . ')<br />'; 
    }
    echo '</div>';
  }
  
  public static function makeAddTagsForm($idEssence, $essenceTypeNumber) {
    echo '<div style="display: none;" id="addTagForm' . $idEssence . '"><div id="addTagFormContent' . $idEssence . '">
            <form method="POST" action="" id="addTagsForm" onsubmit="tags.submitAddAJAX(' . $idEssence . '); return false;">
              Тег(и): <input type="text" value="" name="tag[name]" id="tagsToAdd" />
              &nbsp;
              <input type="submit" name="sbmtAddNewTag" value="Добавить">
              <input type="hidden" name="tag[idEssence]" value="' . $idEssence . '">
              <input type="hidden" name="tag[essenceType]" value="' . $essenceTypeNumber . '">
            </form>
          </div></div>';
  }
  /**
   * Enter description here...
   *
   * @param int $idEssence - для случая, когда много сущностей одного типа на странице
   * @return string
   */
  private static function _getAddTagButton($idEssence = NULL) {
  	
    return '<li class="add_tag">
            <a title="Добавить тег" href="#TB_inline?height=80&amp;width=300&amp;inlineId=addTagForm' . $idEssence . '" title="" class="thickbox" onclick="tags.initAddTag(' . $idEssence . ');return false;">Добавить тег</a>&nbsp;
          </li>';
  }
  
  public static function showRecentTagsAdmin($arrTags) {
    echo '<table id="adminRecentTagsTable">';
      echo '<tr><th>ID</th><th>Имя</th><th>Пользователь</th><th class="simple" style="width:40px">&nbsp;</th></tr>';
      foreach($arrTags as $arrTag) {
        echo '<tr>';
          echo '<td>' . $arrTag['ID_tag'] . '</td>';
          echo '<td>' . $arrTag['tag_name'] . '</td>';
          echo '<td><a target="_blank" href="' . W_ABSPATH . 'user/' . $arrTag['login'] .'" title="Открыть профайл пользователя (в новой вкладке)">' . $arrTag['login'] . '</td>';
          echo '<td class="simple"><a target="_blank" href="' . W_ABSPATH . Service_Essence::getEssenceUrl($arrTag['essence_type'], $arrTag['ID_essence']) . '" title="Открыть сущность (в новой вкладке)"><img src="' . W_IMAGES . 'icons/maximize.gif" alt=""></a>&nbsp;
                        <a href="#" title="Удалить тег" class="removeTag" onclick="tags.removeTagFromEssenceByAdmin(this, ' . $arrTag['ID_essence'] . ', ' . $arrTag['essence_type'] . ', \'' . $arrTag['tag_name'] . '\');return false;"><img src="' . W_IMAGES . 'background/bg_new_tags.gif"></a>
                </td>';
        echo '</tr>';
      }
    echo '</table>';
  }
  
  //выводит общее облако тегов
  public static function viewCommonCloud($arrTags, $essenceType = false) {
    //получаем максимальное значение
    $maxAmount = Tags::getMaxTagsAmount($arrTags);
    echo '<div class="commonCloud">';
      echo '<div class="subCloud">';
        for ($i = 0; $i < sizeof($arrTags); $i++)
          self::_parseCount(round($arrTags[$i]['amount'] / $maxAmount * 100));
        $notEmptyCnts = 0;
        for ($i = 0; $i < sizeof(self::$_arrCounts); $i++)
          if (self::$_arrCounts[$i]) $notEmptyCnts++;    
        for ($i = 0; $i < sizeof($arrTags); $i++) {
          $linkTags = $arrTags[$i]['tag_name'];
          $essenceTypeCondition = '';
          echo '<a href="' . W_ABSPATH . 'tag/' . str_replace("#", "%23", str_replace("+", "%2B", $arrTags[$i]['tag_name'])) . ($essenceType ? '/' . $essenceType : '') .'" class="' . self::_getClassName(round($arrTags[$i]['amount'] / $maxAmount * 100), $notEmptyCnts) . '">' . $arrTags[$i]['tag_name'] . '</a>  ';
        }
      echo '</div>';
    echo '</div>';
  }
  
  
}
?>